package Insectos;

import javax.swing.Icon;
import javax.swing.ImageIcon;

import General.Elemento;

public abstract class Insecto extends Elemento {

	protected int velocidad;
	protected int defensa;
	protected int vida;
	protected int oroDestruccion;
	protected int puntosDestruccion;

	/**
	 * Devuelve la velocidad del insecto.
	 * @return un entero.
	 */
	public int getVelocidad() {
		return velocidad;
	}
	/**
	 * Devuelve la defensa del insecto.
	 * @return un entero.
	 */
	public int getDefensa() {
		return defensa;
	}

	/**
	 * Devuelve la vida del insecto.
	 * @return un entero.
	 */
	public int getVida() {
		return vida;
	}

	/**
	 * El oro correspondiente al haber muerto.
	 * @return un entero.
	 */
	public int getOroDestruccion() {
		return oroDestruccion;
	}

	/**
	 * El puntaje de dicho insecto.
	 * @return un entero.
	 */
	public int getPuntosDestruccion() {
		return puntosDestruccion;
	}

	/**
	 * Setea la vida del insecto. En caso de ser menor o igual a 0, setea 0.
	 * @param v valor a setear.
	 */
	public void setVida(int v) 
	{
		if(vida-v<=0)
			vida=0;
		else
		{	
			vida-=v;
		}
	}


	/**
	 * Metodo que permite el movimiento del insecto.
	 */
	public void Caminar() {
		x-=6;
	}
	/**
	 * Determina si el insecto esta muerto.
	 * @return true, si la vida es igual a 0. False en el otro caso.
	 */
	public boolean estaMuerto(){
		if(vida == 0)
			{
				ImageIcon aux = (ImageIcon) this.getImagenMuerte();
				aux.getImage().flush();
				EG.setImagen(aux);
				try {
					this.sleep(1500);
					} 
				catch (InterruptedException e) {}
				game.eliminarInsecto(this);
				return true;
			}
		return false;
	}
	
	/**
	 * Determina si el insecto llego a la meta sin que haya muerto.
	 * @return true, si llego. False, en caso contrario.
	 */
	public boolean llegoDestino() {
		if(getX() < -60)
		{
			game.perderVida();
			game.eliminarInsectoLlego(this);
			return true;
		}
		return false;
	}
	
	public abstract Icon getImagen();
	
	public abstract Icon getImagenMuerte();

	/**
	 * Se encarga de realizar la simulacion de la explosion del insecto.
	 */
	public void destruir(){
		ImageIcon aux = new ImageIcon(getClass().getResource("/Imagenes/explosion.gif"));
		aux.getImage().flush();
		EG.setImagen(aux);
			try {
				this.sleep(1500);
				} 
			catch (InterruptedException e) {}
			game.eliminarInsecto(this);
	}
	
	/**
	 * Realiza la simulacion de impacto de un disparo en el insecto.
	 */
	public void Hit()
	{
		EG.setEnabled(false);
		try {
			Thread.sleep(200);
			} 
		catch (InterruptedException e) {}
		EG.setEnabled(true);
	}

	
}
